#include <stdio.h>
#include <string.h>

int main()
{
    // strlen:计算字符串长度
    // char s[] = "hello"; // 留一个位置给\0
    // printf("%ld\n", strlen(s));
    // printf("%ld\n", sizeof(s)); // 多一个\0

    // strcpy:字符串拷贝 不会进行越界检查
    // char str[6] = {0};
    // char *s = "hello";
    // strcpy(str, s); // 不是内存安全的函数(可能会拷贝越界)
    // printf("%s\n", str);

    // strncpy:拷贝n个字符(安全的)
    // const char *s = "hello";
    // char str[3] = {0};
    // strncpy(str, s, sizeof(str) - 1);
    // printf("%s\n", str);

    // strcmp:字符串比较函数
    // if (strcmp(s, str) == 0) // 字符串相等
    // {
    //     printf("字符串相等");
    // }
    // const char *s1 = "ha";
    // const char *s2 = "dh";
    // 返回值：字符串中同一位置的字符的asc码的差值
    // 一个字符一个字符的比较，找到不为0的差值返回
    // const char *s1 = "hello";
    // const char *s2 = "helloaorld"; // 这两个比较，结果-97
    // 子串：由字符串的一部分组成的字符串
    // printf("%d\n", strcmp(s1, s2));

    // strncmp:比较n个字符
    // const char *s1 = "hello";
    // const char *s2 = "helloaorld";
    // printf("%d\n", strncmp(s1, s2, 5));//比较5个

    // strstr:字符串匹配函数
    // const char *s1 = "llo";
    // const char *s2 = "helloaorld";
    // 在前一个字符串中寻找后一个字符串，找到就返回该子串在前一个字符串中的首地址
    // 没找到返回空指针：NULL
    // const char *s1 = "llo";
    // const char *s2 = "heaorld";  // 输出“没找到”
    // char *dest = strstr(s2, s1); // 输出lloaorld
    // if (dest == NULL)
    // {
    //     printf("没找到\n");
    // }
    // else
    // {
    //     printf("%s\n", dest);
    // }

    // strtok:字符串切割函数
    // strtok会把分隔符变为\0
    // char str[] = "zhangsan,lisi,wangwu";
    // char *s = strtok(str, ",."); // 切割
    // while (s != NULL)
    // {
    //     printf("%s\n", s);
    //     s = strtok(NULL, ",.");
    // }

    // strcat:字符串拼接函数
    //  const char *s = "world";
    //  char str[8] = "hello";//不安全；小于字符串长度时，会溢出
    //  strcat(str,s);
    //  printf("%s\n",str);

    // strncat:字符串拼接函数
    // const char *s = "world";
    // char str[8] = "hello";
    // strncat(str, s, sizeof(str) - strlen(str) - 1);
    // printf("%s\n", str);
    return 0;
}
